import pyautogui
import time
import os
import pygetwindow as gw

def click_image_on_screen(image_filename, region, confidence=0.8, action_description="点击"):
    """
    在指定区域内查找并点击图像文件。
    如果未找到图像，将截取指定区域的屏幕截图以供调试。

    参数:
        image_filename (str): 'templates' 文件夹中的图像文件名。
        region (tuple): 搜索图像的屏幕区域 (left, top, width, height)。
        confidence (float): 图像匹配的置信度（0.0 到 1.0）。
        action_description (str): 描述当前正在尝试执行的操作，用于打印信息。
    返回:
        bool: 如果成功找到并点击图像，则返回 True；否则返回 False。
    """
    # 获取当前脚本所在的目录
    # 注意：如果这个函数被其他模块调用，__file__ 会指向调用它的模块的路径
    # 为了确保 templates 路径始终正确，最好使用 os.path.abspath(__file__)
    script_dir = os.path.dirname(os.path.abspath(__file__))
    templates_dir = os.path.join(script_dir, 'templates')
    image_path = os.path.join(templates_dir, image_filename)

    print(f"尝试在指定区域 {region} 定位 '{image_filename}' ({action_description})，置信度为 {confidence}...")
    try:
        location = pyautogui.locateOnScreen(image_path, region=region, confidence=confidence)

        if location:
            print(f"在位置 {location} 找到 '{image_filename}'。")
            center_x = location.left + location.width / 2
            center_y = location.top + location.height / 2

            print(f"点击 '{image_filename}' 的中心点: ({center_x}, {center_y})...")
            pyautogui.click(center_x, center_y)
            print(f"'{image_filename}' {action_description}成功！")
            return True
        else:
            print(f"未能在指定区域找到 '{image_filename}'。请确保图像文件路径正确且图像在该区域内可见。")
            current_time = time.strftime("%Y%m%d_%H%M%S")
            screenshot_filename = f"debug_screenshot_failed_{image_filename.replace('.png', '')}_{current_time}.png"
            try:
                pyautogui.screenshot(screenshot_filename, region=region)
                print(f"失败时已保存屏幕截图到: {screenshot_filename}")
            except Exception as e:
                print(f"保存调试截图失败: {e}")
            return False
    except pyautogui.PyAutoGUIException as e:
        print(f"PyAutoGUI 错误: {e}")
        print("请确保图像在该区域内可见，或者检查图像文件是否存在且可读。")
        return False
    except Exception as e:
        print(f"发生了一个意外错误: {e}")
        return False


def run_aethergazer_sweep():
    """
    执行《深空之眼》游戏中的自动化扫荡流程。
    包括查找窗口、一系列点击操作和按键操作。
    """
    # 给自己几秒钟时间切换到目标应用程序或窗口
    print("脚本将在 2 秒后开始。请切换到你希望执行操作的窗口（AetherGazer）。")
    time.sleep(2)

    # --- 查找目标窗口 ---
    aethergazer_window = None
    try:
        windows = gw.getWindowsWithTitle('AetherGazer')
        if windows:
            aethergazer_window = windows[0]
            print(f"找到 'AetherGazer' 窗口: {aethergazer_window.title}")
            aethergazer_window.activate()
            time.sleep(1) # 给窗口激活一点时间
        else:
            print("未找到标题包含 'AetherGazer' 的窗口。请确保游戏正在运行且窗口可见。")
            return False # 找不到窗口则返回 False
    except Exception as e:
        print(f"查找 'AetherGazer' 窗口时发生错误: {e}")
        print("请确保 'pygetwindow' 已正确安装。")
        return False # 发生错误则返回 False

    # 定义操作区域为 AetherGazer 窗口的矩形区域
    target_region = (aethergazer_window.left, aethergazer_window.top,
                     aethergazer_window.width, aethergazer_window.height)
    print(f"操作区域已设置为: {target_region}")

    print("--- 开始自动化流程 ---")

    # 步骤 1: 模拟按下 'j' 键
    print("模拟按下 'j' 键...")
    pyautogui.press('j')
    time.sleep(1)

    # 步骤 2: 点击 goods.png
    if click_image_on_screen("goods.png", region=target_region, action_description="点击 goods"):
        print("等待画面加载...")
        time.sleep(2)

        # 步骤 3: 点击 coins.png
        if click_image_on_screen("coins.png", region=target_region, action_description="点击 coins"):
            print("等待画面加载...")
            time.sleep(2)

            # 步骤 4: 点击 level_5.png
            if click_image_on_screen("level_5.png", region=target_region, action_description="点击 level_5"):
                print("等待画面加载...")
                time.sleep(2)

                # 步骤 5: 点击 right_all.png (置信度设置为 0.9)
                if click_image_on_screen("right_all.png", region=target_region, confidence=0.9, action_description="点击 right_all"):
                    print("等待画面加载...")
                    time.sleep(2)

                    # 步骤 6: 点击 sweep_start.png
                    if click_image_on_screen("sweep_start.png", region=target_region, action_description="点击 sweep_start"):
                        print("等待操作完成...")
                        time.sleep(3)

                        # 步骤 7: 第一次按下回车键
                        print("第一次按下回车键...")
                        pyautogui.press('enter')
                        print("第一次回车键已按下！")

                        # 步骤 8: 等待 3 秒后，再按一次回车键
                        print("等待 3 秒后，再次按下回车键...")
                        time.sleep(3)
                        pyautogui.press('enter')
                        print("第二次回车键已按下！")

                        # 步骤 9: 等待 3 秒后，点击 home.png (置信度设置为 0.7)
                        print("等待 3 秒后，尝试点击 home.png...")
                        time.sleep(3)
                        if click_image_on_screen("home.png", region=target_region, confidence=0.7, action_description="点击 home"):
                            print("自动化流程成功完成！")
                            return True
                        else:
                            print("自动化流程在点击 home.png 处停止。")
                            return False
                    else:
                        print("未找到 sweep_start.png，自动化流程停止。")
                        return False
                else:
                    print("未找到 right_all.png，自动化流程停止。")
                    return False
            else:
                print("未找到 level_5.png，自动化流程停止。")
                return False
        else:
            print("未找到 coins.png，自动化流程停止。")
            return False
    else:
        print("未找到 goods.png，自动化流程停止。")
        return False

if __name__ == "__main__":
    # 当这个文件被直接运行时，执行自动化流程
    success = run_aethergazer_sweep()
    if success:
        print("--- 脚本执行完毕 --- (成功)")
    else:
        print("--- 脚本执行完毕 --- (有步骤失败)")